/*
 * Escreve um banco de dados de registros. Depois altera
 * um registro específico diretamente no arquivo em disco.
 */
#include<stdio.h>
#include<stdlib.h>

typedef char Disc[5];

struct reg {
  int RA;
  char nome[30];
  Disc matriculas[6];
  float CR, CP;
};

typedef struct reg Reg_aluno;

#define N_REGS 2

Reg_aluno dados[N_REGS] = {
  {12436, "Maria", {"MC102", "MA141", "F 128", "F 129"}, 0.0, 0.0},
  {12232, "João", {"MC202", "MA211", "F 228", "F 229"}, 0.8, 0.15}
};


void escreve_dados() {
  FILE  *fw;

  fw = fopen ("dados_aluno.bin", "w");

  if (fw == NULL) {
    perror("dados_aluno.bin");
    exit(-1);  /* Abandona o programa */  
  }
  
  fwrite(dados, sizeof(Reg_aluno), N_REGS, fw); 

  fclose(fw);  
}

void altera_dados(int i, int ra) {
  FILE  *f;
  Reg_aluno dado;

  f = fopen ("dados_aluno.bin", "r+");

  if (f == NULL) {
    perror("dados_aluno.bin");
    exit(-1);  /* Abandona o programa */  
  }

  fseek(f, i * sizeof(Reg_aluno), SEEK_SET);
  fread(&dado, sizeof(Reg_aluno), 1, f);
  dado.RA = ra;

  fseek(f, i * sizeof(Reg_aluno), SEEK_SET);
  fwrite(&dado, sizeof(Reg_aluno), 1, f);
}

int main() {
  escreve_dados();
  altera_dados(1, 666);
  return 0;
}
